package docker

//docker命令
//帮助文档的地址  https://docs.docker.com/engine/reference/run/


//常用命令
func command(){
	/**-------帮助命令----------**/

	docker version  //显示docker的版本信息
	docker info  //显示docker的系统信息，包括显示镜像和容器的数量
	docker 命令 --help //帮助命令

	docker的相关命令
	systemctl start docker // 启动docker
	systemctl stop docker //#停止docker
	systemctl restart docker //#重启docker
	systemctl status docker  //#查看docker状态
	systemctl enable docker //#开机启动
	systemctl unenable docker //取消开机启动
	docker info  //#查看docker概要信息
	docker --help  //#查看docker帮助文档


	/**-------镜像命令----------**/

	docker images //查看所有本地的主机上的镜像
		docker images --help
		[root@VM_0_13_centos docker]# docker images
		REPOSITORY    TAG       IMAGE ID       CREATED         SIZE
		hello-world   latest    bf756fb1ae65   13 months ago   13.3kB
		[root@VM_0_13_centos docker]
		//解释
		REPOSITORY 镜像的仓库员
		TAG			镜像的标签
		IMAGE ID	镜像的id
		CREATED		镜像的创建时间
		SIZE		镜像的大小
		//可选项
		[root@VM_0_13_centos docker]# docker images --help

		Usage:  docker images [OPTIONS] [REPOSITORY[:TAG]]

		List images

		Options:
		列出所有镜像
		-a, --all             Show all images (default hides intermediate images)
		--digests         Show digests
		过滤
		-f, --filter filter   Filter output based on conditions provided
		--format string   Pretty-print images using a Go template
		--no-trunc        Don't truncate output
		只显示镜像的id
		-q, --quiet           Only show image IDs
		[root@VM_0_13_centos docker]

	docker search 搜索镜像
		docker search mysql
		[root@VM_0_13_centos docker]# docker search mysql
		NAME                              DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
		mysql                             MySQL is a widely used, open-source relation…   10532     [OK]
		mariadb                           MariaDB is a community-developed fork of MyS…   3934      [OK]
		mysql/mysql-server                Optimized MySQL Server Docker images. Create…   773                  [OK]
		......
		[root@VM_0_13_centos docker]#

		可选项
		docker seach --help
			Options:
			-f, --filter filter   Filter output based on conditions provided
			--format string   Pretty-print search using a Go template
			--limit int       Max number of search results (default 25)
			--no-trunc        Don't truncate output

		//搜索出来的镜像STARS大于3000的
		docker search mysql --filter=STARS=3000


	docker pull 下载镜像
		docker pull 镜像名[:tag]
		docker pull mysql
		[root@VM_0_13_centos docker]#  docker pull mysql
		Using default tag: latest  //如果不写tag版本，默认就是latest最新
		latest: Pulling from library/mysql
		a076a628af6f: Pull complete		//分层下载，docker images镜像的核心
		f6c208f3f991: Pull complete
		88a9455a9165: Pull complete
		406c9b8427c6: Pull complete
		7c88599c0b25: Pull complete
		25b5c6debdaf: Pull complete
		43a5816f1617: Pull complete
		1a8c919e89bf: Pull complete
		9f3cf4bd1a07: Pull complete
		80539cea118d: Pull complete
		201b3cad54ce: Pull complete
		944ba37e1c06: Pull complete
		Digest: sha256:feada149cb8ff54eade1336da7c1d080c4a1c7ed82b5e320efb5beebed85ae8c  //签名
		Status: Downloaded newer image for mysql:latest
		docker.io/library/mysql:latest	//真实地址
		//即 docker pull mysql 命令等价于 docker pull docker.io/library/mysql:latest
		[root@VM_0_13_centos docker]#

		//指定版本下载
		docker pull mysql:5.7  //此处的版本号必须为官方有的版本号，乱写的版本号找不到


	docker rmi 删除镜像
		docker rmi -f [IMAGE ID] //删除指定id的镜像
		docker rmi -f [IMAGE ID] [IMAGE ID] [IMAGE ID] //删除指定id的多个镜像
		docker rmi -f $(docker images -ap)  //删除所有镜像，$(docker images -ap) 查询所有镜像，然后一个一个删除





	/**-------容器命令----------**/
	//说明：有了镜像才可以创建容器，下载一个centos镜像来学习
	docker pull centos

	新建容器并启动
	docker run [可选命令] image
		//可选参数说明
		--name="Name"	//容器名字 app1 app2 用于区分容器
		-d             //后台方式运行
		-it				//使用交互方式运行，进入容器查看内容
		-p				//指定容器的端口
			-p ip:主机端口:容器端口
			-p 主机端口:容器端口  常用  //主机端口映射到容器端口
			-p 容器端口   //容器端口，不往外走
			容器端口
		-P				//随机指定端口

		启动centos
		[root@VM_0_13_centos docker]# docker run -it centos /bin/bash
		//注意这里root@后变成了容器的id
		[root@c7ed261c1b59 /]# ls	//查看容器内部的centos，基础班，很多命令都不完善
		//该容器内就是liunx centos环境
		bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
		[root@c7ed261c1b59 /]# exit  //退出容器 从容器中退出主机
		exit
		[root@VM_0_13_centos docker]#


	列出所有的运行的容器
	docker ps [可选命令]
			//列出当前正在运行的容器
		-a	//列出当前正在运行的容器+带出历史运行过的容器
		-n=?	//显示最近创建的容器
		-q  //只显示容器的编号


	退出容器
	exit   //直接容器停止并退出
	Ctrl + P + Q //容器不停止退出


	删除容器
	docker rm 容器id	//删除指定的容器，不能删除正在运行中的容器，如果要强制删除 rm =f
	docker rm -f $(docker ps -aq)	//删除所有的容器
	docker ps -a -q|xargs docker rm //删除所有的容器


	启动和停止容器的操作
	docker start 容器id  //启动
	docker restart 容器id	//重启
	docker stop 容器id	//停止当前正在运行的容器
	docker kill	容器id	//强制停止当前正在运行的容器

}


//常用其他命令
func otherCommand(){

	/**-------后台启动容器----------**/
	docker run -d 镜像名
		docker run -d centos
		//问题 docker ps 发现centos停止了
		//常见的坑，docker 容器使用后台运行，就必须要有一个前台进程，docker发现没有应用，就会自动停止
		//nginx容器启动后，发现自己没有提供服务，就会立刻停止，就是没有程序了


	/**-------查看日志----------**/
	docker logs	[可选项] 容器id
		docker logs --help
		Options:
			--details        Show extra details provided to logs
			-f, --follow         Follow log output
			--since string   Show logs since timestamp (e.g. 2013-01-02T13:23:37Z) or relative (e.g. 42m for 42
			minutes)
			-n, --tail string    Number of lines to show from the end of the logs (default "all")
			-t, --timestamps     Show timestamps
			--until string   Show logs before a timestamp (e.g. 2013-01-02T13:23:37Z) or relative (e.g. 42m for
			42 minutes)

		docker logs -tf --tail 10 c7ed261c1b59  显示指定的条数记录


	/**-------查看容器中的进程信息----------**/
	docker top 容器id

	/**-------查看镜像的元数据----------**/
	docker inspect 容器id
			--help


	/**-------进入当前正在运行的容器----------**/
	//我们通常容器都是使用后台方式运行的，需要进入容器，修改一些配置
	//进入容器后，开启一个新的终端，可以在里面操作
	docker exec -it 容器id bashShell
		docker exec -it 容器id  /bin/bash
	//进入容器正在执行过的终端，不会启动新的进程
	docker attach 容器id
		docker attach  容器id  /bin/bash
		//正在执行的代码...


	/**-------从容器内拷贝文件到主机上----------**/
	docker cp 容器id:容器内路径   目的的主机路径
		docker cp 容器id:/home/test.txt /home

	/**-------查看cpu的状态----------**/
	dockre stats


}


func all(){

	attach					Attach to a running container											#当前she77 下attach连接指定运行镜像
	build					Bui1d an image from a Dockerfile										#通过Dockerfile定制镜像
	commit 					create a new image from a container changes								#提交当前容器为新的镜像
	cp						copy files/folders from the containers filesystem to the host path		#从容器中拷贝指定文件或者目录到宿主机中
	create					Create a new container													#创建一个新的容器,同run，但不启动容器
	diff					Inspect changes on a container's filesystem								#查看docker容器变化
	events					Get real time eyents from the server									#从docker服务获取容器实时事件
	exec					Run a command in an existing container									#在已存在的容器上运行命令
	export 					Stream the contents of a container as a tar archive						#导出容器的内容流作为一个 tar归档文件[对应import ]
	history 				show the history of an image											#展示一个镜像形成历史
	images					List images																#列出系统当前镜像
	import 					Create a new filesystem image from the contents of a tarball 			# 从tar包中的内容创建一个新的文件系统映像[对应export]
	info					Display system-wide information											#显示系统相关信息
	inspect 				Return low-1evel information on a container								#查看容器详细信息
	kill					Kill a running container												#ki17指定docker容器
	load					Load an image from a tar archive										#从一个tar包中加载一个镜像[对应save]
	login 					Register or Login to the docker registry server 						#注册或者登陆一个 docker 源服务器
	1ogout					Log out from a Docker registry server									#从当前Docker registry退出
	logs					Fetch the logs of a container											#输出当前容器日志信息
	port 					Lookup the public-facing port which is NAT-ed to PRIVATE_PORT 			#查看映射端口对应的容器内部源端口
	pause					Pause al1 processes within a container									#暂停容器
	ps						List containers															#列出容器列表
	pull					Pull an image or a repository from the docker registry server 			#从docker镜像源服务器拉取指定镜像或者库镜像
	push					Push an image or a repository to the docker registry server 			#推送指定镜像或者库镜像至docker源服务器
	restart					Restart a running container												#重启运行的容器
	rm						Remove one or more containers											#移除一个或者多个容器
	rmi						Remove one or more images												#移除一个或多个镜像[无容器使用该镜像才可删除，否则需删除相关容器才可继续或-f强制删除]
	run						Run a command in a new container										#创建一个新的容器并运行一个命令
	save					Save an image to a tar archive											#保存一个镜像为一个tar包[对应1oad]
	search					search for anr image on the Docker Hub									#在docker hub中搜索镜像
	start					start a stopped containers												#启动容器
	stop					stop a running containers												#停止容器
	tag						Tag an image into a repository											#给源中镜像打标签
	top						Lookup the running processes of a container								#查看容器中运行的进程信息
	unpause 				Unpause a paused container												#取消暂停容器
	version 				show the docker version information										#查看docker版本号
	wait 					Block until a container stops，then print its exit code					#截取容器停止时的退出状态值



}

//可视化
func portainer(){
	docker 图形化界面管理工具，提供一个后台面板供我们操作
	docker run -d -p 8088:9000 --restart-always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer
}


func logic(){
	镜像是什么
	镜像是一种轻量级，可执行的独立软件包，用来打包软件运行环境和基于运行环境开发的软件
	它包含运行某个软件所需的所有内容，包含代码，运行时，库，环境变量和配置文件。
	所有的应用，直接打包docker进行啊，就可以直接部署跑起来

	如何得到镜像
		1.从远程仓库下载
		2.自己拷贝
		3.自己制作一个镜像dockerFile

	docker镜像加载原理
		UnionFS (联合文件系统)
		UnionFS（联合文件系统）：Union文件系统（UnionFS）是一种分层、轻量级并且高性能的文件系统，它支持对文件系统的修改作为一次提交来一层层的叠加，
		同时可以将不同目录挂载到同一个虚拟文件系统下（unite several directorries into a single virtual filesystem）.
		union文件系统是dockerr镜像的基础。镜像可以通过分层来进行继承，基于基础镜像（没有父镜像），可以制作各种具体的应用镜像

		特性：一次同时加载多个文件系统，但从外面看起来，只能看到一个文件系统，联合加载会把各层文件系统叠加起来，这种最终 文件系统会包含所有底层的文件和目录



	如何提交一个自己的镜像
	commit 镜像

	docker commit 提交容器成为一个新的副本

	//命令和git原理类似
	docker commit -m="提交的描述信息" -a="作者" 容器id 目标镜像名:[tag]

	docker commit -m="add goshop web pargom" -a="zydh" 容器id go-nignx-mysql-redis-goshop:2021-2-23.1.0


}